package com.thghh.jreble;

import javassist.ClassPool;
import javassist.CtClass;
import javassist.CtMethod;

/**
 * com.thghh.jreble.JrebleByteCode
 * 
 * @author pengzhikang
 * @date 2018年4月18日下午8:50:33
 * @since 1.0
 */
public class JrebleByteCode {

    private String jrebelJar;

    public JrebleByteCode(String jrebelJar) {
        this.jrebelJar = jrebelJar;
    }

    public void signature() {
        try {
            ClassPool pool = ClassPool.getDefault();
            pool.insertClassPath(jrebelJar);
            CtClass cc1 = pool.get("com.zeroturnaround.javarebel.mq");
            CtClass[] params = new CtClass[2];
            // 方法对应的参数
            params[0] = pool.get("com.zeroturnaround.javarebel.dzt");
            params[1] = pool.get("com.zeroturnaround.licensing.UserLicense");
            // 取得需要修改的方法
            CtMethod method = cc1.getDeclaredMethod("a", params);
            // 插入修改项，我们让他直接返回true(注意：根据方法的具体返回值返回，因为这个方法返回值是boolean，所以直接return
            // true;)
            method.insertBefore("if(1!=0)return true;");
            // 写入保存
            cc1.writeFile();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
